package com.winsdom.mapper.customer;

import com.winsdom.entity.customer.CustomerIndividualCreateRequest;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

/**
 * 个体工商户客户创建相关的数据访问接口，提供个体工商户客户信息创建过程中涉及的各类数据操作。
 * 该接口包含了插入个体工商户客户基本信息、经营地址、营业执照、联系人信息等相关方法。
 */
@Repository
public interface CustomerIndividualCreateMapper {
    /**
     * 插入客户主表信息
     * @param request 个体工商户创建请求对象，包含客户基本信息
     */
    void insertCustomer(CustomerIndividualCreateRequest request);

    /**
     * 获取最后一次插入操作生成的客户ID
     * 用于后续关联表的插入操作
     * @return 最后插入记录的自增客户ID
     */
    Long getLastInsertId();

    /**
     * 插入个体工商户扩展表信息
     * @param request 个体工商户创建请求对象，包含个体工商户特有信息
     */
    void insertIndividualBusiness(CustomerIndividualCreateRequest request);

    /**
     * 插入个体工商户经营地址信息
     * @param request 个体工商户创建请求对象，包含经营地址信息
     */
    void insertBusinessAddress(CustomerIndividualCreateRequest request);

    /**
     * 插入个体工商户营业执照信息
     * @param request 个体工商户创建请求对象，包含营业执照信息
     */
    void insertBusinessLicense(CustomerIndividualCreateRequest request);

    /**
     * 插入个体工商户联系人信息
     * @param customerId 客户ID
     * @param contact 联系人信息对象，包含联系人详细信息
     */
    void insertContact(@Param("customerId") Long customerId,
                       @Param("contact") CustomerIndividualCreateRequest.ContactInfo contact);

    /**
     * 插入联系人与楼盘分类的关联关系
     * @param contactId 联系人ID
     * @param categoryId 楼盘分类ID
     */
    void insertContactProperty(@Param("contactId") Long contactId,
                               @Param("categoryId") Long categoryId);

    /**
     * 根据楼盘分类名称查询对应的分类ID
     * @param propertyName 楼盘分类名称
     * @return 对应的楼盘分类ID，如果不存在则返回null
     */
    Long selectCategoryIdByName(String propertyName);
}